#include <iostream>
#include <unistd.h>
#include <signal.h>

void myhandler(int signo)
{
    std::cout << "process get a signal: " << signo << std::endl;
    exit(1);  // 一定要+exit
    // 以除0错误发生为例，倘若设置该函数为SIGFPE的处理函数，则会循环执行该函数。
    // 因为发生除零错误时，状态寄存器被设置，寄存器不断向OS发送硬件中断信号，因此进程会不断接收到OS发送来的SIGFPE信号
}

int main()
{
    // 屏蔽其他信号的干扰
    for(int i = 1; i <= 31; ++i)
    {
        signal(i, SIG_IGN); 
    }

    signal(SIGINT, myhandler);  //  signal(2, myhandler);
    signal(SIGKILL, myhandler); //  signal(9, myhandler); 该设置无效，因为信号9不被设置
    signal(SIGSTOP, myhandler); //  signal(19, myhandler); 该设置无效，因为信号19不被设置

    while(true)
    {
        std::cout << "I am a process, pid: " << getpid() << std::endl;
        sleep(1);
    }

    return 0;
}